package models

import (
	"errors"
	"time"

	"gorm.io/gorm"
)

type XinmanSmtpSetting struct {
	ID         int8      `gorm:"type:tinyint;primaryKey;check:id=1" json:"id"`                                                    // 确保 id 始终为 1
	Host       string    `gorm:"type:varchar(255);not null" json:"host"`                                                          // SMTP 服务器地址
	Port       int       `gorm:"type:int;not null" json:"port"`                                                                   // SMTP 端口
	Username   string    `gorm:"type:varchar(190);not null;unique" json:"username"`                                               // SMTP 用户名
	Password   string    `gorm:"type:varchar(255);not null" json:"password"`                                                      // SMTP 密码或授权码
	Encryption string    `gorm:"type:enum('none','ssl');default:'none'" json:"encryption"`                                        // 加密方式
	CreateTime time.Time `gorm:"type:timestamp;not null;default:CURRENT_TIMESTAMP" json:"createTime"`                             // 创建时间
	UpdateTime time.Time `gorm:"type:timestamp;not null;default:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" json:"updateTime"` // 更新时间
}

// TableName 返回表名
func (XinmanSmtpSetting) TableName() string {
	return "xinman_smtp_setting"
}

func (s *XinmanSmtpSetting) BeforeCreate(tx *gorm.DB) (err error) {
	var count int64
	tx.Model(&XinmanSmtpSetting{}).Count(&count)
	if count > 0 {
		return errors.New("只能存在一条 SMTP 设置记录")
	}
	return nil
}
